// Reflect 静态类 统一的对象操作API 不通过new来调用 封装了一系列对对象的底层操作
// 总共14个 废弃了1个 还有13个
// 所有方法的方法名与Proxy里面的处理对象的方法名完全一致，其实就是Proxy处理对象的默认实现
// 类似于Math
const obj = {
  foo: '123',
  bar: '456',
};

const proxy = new Proxy(obj, {
  get(target, prop) {
    console.log('with logic~');
    return Reflect.get(target, prop);
  },
});
console.log(proxy.foo);
// 最大的价值是提供一套统一用于操作对象的API
console.log(Reflect.has(obj, 'foo'));
console.log(Reflect.get(obj, 'bar'));
console.log(Reflect.ownKeys(obj));
console.log(Reflect.getOwnPropertyDescriptor(obj, 'foo'));
console.log(Reflect.deleteProperty(obj, 'foo'));
console.log(Reflect.getPrototypeOf(obj));
console.log(Reflect.defineProperty(obj, 'name', { value: 'cuvee' }));
console.log(Reflect.set(obj, 'age', 30));

console.log(Reflect.ownKeys(obj));

function Person(name) {
  this.name = name;
}
const p = new Person();

console.log(Reflect.getPrototypeOf(p) === Person.prototype);
